<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 分析题目描述
        // 0. 判断是否数字是否是0
        // 1. 如果开头是空格，忽略开头所有空格 去除前导空格
        // 2. 如果检测完空格，紧接着检测是否是负数，如果检测到-号，最终要转化为负数 不然就是正数 默认 前置符号判断
        // 3. 如果下一个字符是非数字，就停止读，非数字不能放进去 非数字判断
        // 4. 如果一个数字都没有，就返回0
        // 5. 如果正数 超过 2^31-1 就固定为2^31-1 Math.pow(2,31) 是否溢出判断
        // 6. 如果负数 小于 -2^31  就固定为 -2^31 - Math.pow(2,31)
        // 7. 取出字符组合成整数

        // 用例：
        // "42" 42
        // "   -42" -42
        // "4193 with words" 4193
        // "words and 987" 0 
        // "-91283472332" -2147483648

        var myAtoi = function (s) {
            debugger
            // 1. 前面的空格去掉
            // 2. 检测符号 + - 使用sign变量
            // 3. 中间出现了非数字 就停止
            // 4. 如果没有数字就是0
            // 5. 字符转化为数字 利用 - '0' 并且要进行截取回滚

            let index = 0 // 控制循环
            let sign = 1 // 控制正负
            let n = s.length // 字符的长度
            let sum = 0 // 用于求和
            let max = Math.pow(2, 31) - 1
            let min = - Math.pow(2, 31)
            // 1. 
            while (s[index] === ' ') {
                index++
            }
            // 2. 
            if (s[index] === '+') {
                sign = 1
                index++
            } else if (s[index] === '-') {
                sign = -1
                index++
            }

            // 3.
            while (index < n) {
                // 中间非数字
                if (s[index] === ' ') {
                    break
                }
                // 非字符
                if (!(s.charCodeAt(index) >= 48 && s.charCodeAt(index) <= 57)) {
                    break
                }
                let num = s[index] - 0
                sum = sum * 10 + num
                index++
            }

            // 4. 溢出判断
            let res = sign * sum
            if (res > max) {
                return max
            } else if (res < min) {
                return min
            }
            return res
        }
        // console.log(myAtoi("   -42"));
        console.log(myAtoi("words and 987"));
    </script>

</body>

</html>